package com.zgis.module.bas.util;

/**
 * 修改记录:
 * 24-09-29     zhengchaojun             首次创建
 */


import cn.hutool.core.util.NumberUtil;

/**
 * 类描述：字符串工具类
 */
public class CxStrUtil
{
    /**
     * 替换@exp
     *
     * @param exp 值 【exp = 张三】
     * @param sql sql语句
     * @return
     */
    public static String replaceExp(String exp, String sql)
    {
        if (!CxValueUtil.isEmpty(exp))
        {
            sql = sql.replace("@exp", exp);
        }
        else
        {
            sql = sql.replace("@exp", "");
        }
        return sql;
    }

    /**
     * 替换SQL中的值为?号
     *
     * @param exp 值 【value = 张三】
     * @param val val的值
     * @return 值对象
     */
    public static String replaceExpQues(String exp, String val)
    {
        if (!CxValueUtil.isEmpty(val))
        {
            String[] value = val.split(",");
            for (int i = 0; i < value.length; i++)
            {
                exp = exp.replaceFirst("\\?", value[i]);
            }
        }
        return exp;
    }

    /*
     * 替换SQL中的值为?号 <br>
     * @param exp      值 【value = 张三】
     * @param val      val的值
     * @param expVals  数据库配置对象
     * @retrun  值对象
     */
    public static String replaceExpQues(String exp, String val, String expVals)
    {
        boolean  isNull = CxValueUtil.isEmpty(val);
        String[] value  = isNull ? new String[0] : val.split(",");
        String[] expVal = expVals.split(",");
        for (int i = 0; i < expVal.length; i++)
        {
            // 1、判断是包含了{说明需要替换这个值，某则用数据库中的值
            if (expVal[i].indexOf("{") == 0)
            {
                exp = exp.replaceFirst("\\?", isNull ? "0" : value[i]);
            }
            else
            {
                exp = exp.replaceFirst("\\?", expVal[i]);
            }
        }
        return exp;
    }

    /*
     * 替换SQL中的?号 <br>
     * @param exp  条件
     * @param sql  sql语句
     */
    public static String replaceQues(String exp, String sql)
    {
        if (!CxValueUtil.isEmpty(exp))
        {
            sql = sql.replace("?", exp);
        }
        else
        {
            sql = sql.replace("?", "");
        }
        return sql;
    }

    /*
     * 替换SQL中的值为引号 <br>
     * @param value  值 【value = 张三】
     * @retrun  '张三'
     */
    public static String replaceVal(String value)
    {
        if (value.indexOf("'") < 0 && value.indexOf(" ") < 0)
        {
            return "'" + value.replaceAll(",", "','") + "'";
        }
        return value;
    }

    /*
     * 排除系统参数 <br>
     * @param value  值 【value = 张三】
     * @retrun  '张三'
     */
    public static boolean excludeSysPara(String key)
    {
        boolean result = false;
        if (!key.equals("_major") && !key.equals("_minor") && !key.equals("_auth") && !key.equals("cmd") && !key.equals("retAtt"))
        {
            result = true;
        }
        return result;
    }

    /*
     * 只查询这些表 <br>
     * @param value  值 【value = 张三】
     * @retrun  '张三'
     */
    public static boolean includeTabPara(String tabname)
    {
        boolean result = false;
        if (!tabname.equals("entity") && !tabname.equals("fld") && !tabname.equals("fldvalue") && !tabname.equals("syscfg") && !tabname.equals("cx_sqlexp") && !tabname.equals("usersql"))
        {
            result = true;
        }
        return result;
    }

    /**
     *  判断是否为数字
     * @param str    值 【value = 张三】
     * @return       true/false
     */
    public static boolean isNumber(String str)
    {
        return NumberUtil.isNumber(str);
    }
}
